import { DeepseekClient } from './client'
import type { Message } from './client'

// 定义响应类型
interface ChatResponse {
	content: string
}

/**
 * 示例：使用HTTP请求进行非流式调用
 */
async function exampleNonStream() {
	console.log('===== 非流式请求示例 =====')
	
	const messages: Message[] = [
		{ role: 'system', content: '你是一个有用的AI助手。' },
		{ role: 'user', content: '请用中文介绍一下自己。' }
	]
	
	console.log('发送请求...')
	try {
		const response = await fetch('http://localhost:3000/v1/chat/completions', {
			method: 'POST',
			headers: {
				'Content-Type': 'application/json',
			},
			body: JSON.stringify({
				messages,
				stream: false,
				temperature: 0.7
			})
		})
		
		const data = await response.json() as ChatResponse
		console.log('响应内容:')
		console.log(data.content)
	} catch (error) {
		console.error('请求失败:', error)
	}
}

/**
 * 示例：使用HTTP请求进行流式调用
 */
async function exampleStream() {
	console.log('===== 流式请求示例 =====')
	
	const messages: Message[] = [
		{ role: 'system', content: '你是一个有用的AI助手。' },
		{ role: 'user', content: '请用中文写一首关于人工智能的短诗。' }
	]
	
	console.log('发送流式请求...')
	try {
		const response = await fetch('http://localhost:3000/v1/chat/completions', {
			method: 'POST',
			headers: {
				'Content-Type': 'application/json',
			},
			body: JSON.stringify({
				messages,
				stream: true,
				temperature: 0.7
			})
		})
		
		// 获取响应的可读流
		const reader = response.body?.getReader()
		if (!reader) throw new Error('无法获取响应流')
		
		const decoder = new TextDecoder()
		let fullResponse = ''
		
		// 处理流式响应
		while (true) {
			const { done, value } = await reader.read()
			if (done) break
			
			// 解码二进制数据为文本
			const text = decoder.decode(value)
			
			// 处理返回的数据行
			const lines = text.split('\n').filter(line => line.trim())
			for (const line of lines) {
				try {
					const data = JSON.parse(line) as { content?: string }
					if (data.content) {
						process.stdout.write(data.content)
						fullResponse += data.content
					}
				} catch (e) {
					console.error('解析JSON失败:', e)
				}
			}
		}
		
		console.log('\n\n完整响应:')
		console.log(fullResponse)
	} catch (error) {
		console.error('流式请求失败:', error)
	}
}

// 运行示例
async function runExamples() {
	// 先运行非流式示例
	await exampleNonStream()
	console.log('\n')
	
	// 再运行流式示例
	await exampleStream()
}

// 执行示例
runExamples().catch(console.error) 